package demo.kk;

public class 最大连续子数组和 {

    public static int maxSubArray(int[] nums) {
        // 初始化当前子数组和为0，最大子数组和为数组第一个元素（处理全负数情况）
        int currentSum = 0;
        int maxSum = nums[0];
        
        for (int num : nums) {
            // 如果当前子数组和为负数，则重置为当前元素（负数会降低后续和）
            if (currentSum < 0) {
                currentSum = num;
            } else {
                // 否则继续累加当前元素
                currentSum += num;
            }
            // 更新最大子数组和
            if (currentSum > maxSum) {
                maxSum = currentSum;
            }
        }
        return maxSum;
    }

    public static void main(String[] args) {
        // 测试用例
        int[] nums = {-2, 1, -3, 4, -1, 2, 1, -5, 4};
        System.out.println("最大连续子数组和: " + maxSubArray(nums)); // 输出应为6
        
        // 全负数测试
        int[] allNegative = {-5, -3, -8, -1};
        System.out.println("全负数数组最大和: " + maxSubArray(allNegative)); // 输出应为-1
    }
}